package start.demo2learn.return2;

public class ShiftChar {

    int num=0;
    char[] c;

    static int size;
    static int count;
    static char[] arrChar=new char[100];
    public static void main(String[] args){
        char[] input=new char[]{'a','s','v','w'};//按照一定规律的轮转即可排出所有可能
        size=input.length;
        count=0;
        for(int j=0;j<size;j++){
            arrChar[j]=input[j];
        }
        doAnagram(size);
    }
    public static void doAnagram(int newSize){
        if(newSize==1){
            return;
        }
        for(int j=0;j<newSize;j++){
            doAnagram(newSize-1);
            if(newSize==2) {
                System.out.print(++count+":");
                System.out.println(arrChar);
            }
            rotate(newSize);//能够会弹
        }
    }
    public static void rotate(int newSize){
        int j;
        int position=size-newSize;
        char temp=arrChar[position];
        for(j=position+1;j<size;j++)
            arrChar[j-1]=arrChar[j];
        arrChar[j-1]=temp;
    }

//    public static void displayWord(){
//
//    }
//    public void turn2(int size,char[] ch){//等后面的先动
//        if(size<ch.length){
//            rotate(size,ch);
//            System.out.println(ch);//
//            turn2(size+1,ch);
//        }
//
//        int len=ch.length;
//        char[] c=new char[len];
//        int index = len - size;//起始下标
//        rotate(index,ch);
////        turn(size-1,ch);//再内排
////        for(int i=1;i<size;i++) {//需要知道转动次数:size-1,siz即右边的字母数
////            if(i!=1){
////                System.arraycopy(c,0,ch,0,len);
////            }
////            //int index = len - size;//起始下标
////            char tmp = ch[index];
////            for (; index < len - 1; index++) {//完成一次转动
////                ch[index] = ch[index + 1];
////            }
////            ch[index] = tmp;
////            System.out.print(++num+":");
////            System.out.println(ch);
////            System.arraycopy(ch,0,c,0,len);//这个顺序不该被再排序影响
////
////        }
//    }
//    public void turn(int size,char[] ch){//内轮转，需要知道转动次数:size-1,siz即右边的字母数
//        /**
//         *先转再打印有问题，应该先打印
//         */
//        if(size==1) {
//            //System.arraycopy(c,0,ch,0,3);
//            return;
//        }
//        int len=ch.length;
//        char[] c=new char[len];
//        for(int i=1;i<size;i++) {//需要知道转动次数:size-1,siz即右边的字母数
//            if(i!=1){
//                System.arraycopy(c,0,ch,0,len);
////                System.out.print("ch:");
////                System.out.println(ch);
//            }
//            int index = len - size;//起始下标
//            char tmp = ch[index];
//            for (; index < len - 1; index++) {//完成一次转动
//                ch[index] = ch[index + 1];
//            }
//            ch[index] = tmp;
//            System.out.print(++num+":");
//            System.out.println(ch);
//            System.arraycopy(ch,0,c,0,len);//这个顺序不该被再排序影响
//            turn(size-1,ch);//再内排
//        }
//    }
//    public void shift(char[] ch){
//        /**
//         *先转再打印有问题，应该先打印
//         */
//        int len=ch.length;
//        c=new char[len];
//        System.arraycopy(ch,0,c,0,len);
//        System.out.print(++num+":");
//        System.out.println(ch);
//        turn(len-1,ch);//再内排
//        System.arraycopy(c,0,ch,0,len);
//        turn(len,ch);
//    }
//    public void rotate(int index,char[] ch){//完成一次转动,包含当前下标
//        char tmp = ch[index];
//        for (; index < ch.length - 1; index++) {
//            ch[index] = ch[index + 1];
//        }
//        ch[index] = tmp;
//        //System.out.println(ch);
//    }
}
